package com.sisgesbyte.web.managedBean.proyeccion;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.proyeccion.MantProyeccionGeneralService;
import com.sisgesbyte.services.proyeccion.bean.ListaProyeccionGeneralResponse;
import com.sisgesbyte.services.proyeccion.bean.ProyeccionGeneralBean;
import com.sisgesbyte.web.managedBean.common.MantenimientoAbstract;
import com.sisgesbyte.web.managedBean.seguridad.OpcionesControlador;

@ManagedBean
@ViewScoped
public class MantProyeccionGeneralMBean extends MantenimientoAbstract implements Serializable{

	private static final long serialVersionUID = 1L;

	@EJB
	private MantProyeccionGeneralService mantProyeccionGeneralService;
	@ManagedProperty(value = "#{opcionesControlador}")
	private OpcionesControlador opcionesControlador;
	private String tipoMantenimiento;
	private String saved;
	private String txtBuscar;
	private FiltrosSQLBean cadenaFiltros;
	private List<ProyeccionGeneralBean> listaProyeccionGeneral;
	private List<ProyeccionGeneralBean> selectedProyeccion;

	
	@PostConstruct
	private void init() {
		saved = "";
		tipoMantenimiento = "";
		txtBuscar = "";
		inicializar();
	}
	@Override
	public void inicializar() {
		
		try{
			this.listaProyeccionGeneral = new ArrayList<ProyeccionGeneralBean>();
			ListaProyeccionGeneralResponse response = mantProyeccionGeneralService.mostrarProyeccionGeneral(ObtenerIdTransaccion(),txtBuscar);
			if(response.getCodigoRespuesta().equalsIgnoreCase(ConstantesInternasSistema.CODIGO_EXITO)){
				this.listaProyeccionGeneral = response.getListaProyeccionGeneral();
			}else{
				System.out.println("No se encontro data ");
			}
			opcionesControlador.habilitarControles(0);
		}catch(Exception e){
			System.out.println("Error al obtener la lista de proyecciones");
		}
		
	}

	@Override
	public void unSelect(UnselectEvent event) {
		opcionesControlador.habilitarControles(selectedProyeccion.size());
	}

	@Override
	public void checkSelect(SelectEvent event) {
		opcionesControlador.habilitarControles(selectedProyeccion.size());
	}

	@Override
	public void seleccionarItem(SelectEvent event) {
		opcionesControlador.habilitarControles(selectedProyeccion.size());
	}

	@Override
	public void dobleSelect(SelectEvent event) {
		List<ProyeccionGeneralBean> selected = new ArrayList<ProyeccionGeneralBean>();
		selected.add((ProyeccionGeneralBean) event.getObject());
		setSelectedProyeccion(selected);
		setSaved("");
		opcionesControlador.habilitarControles(selectedProyeccion.size());
		setTipoMantenimiento(ConstantesInternasSistema.TIPO_MANTENIMIENTO_UPDATE);
	}

	@Override
	public void nuevoItem() {
		setSaved("");
		limpiarFormulario();
		setTipoMantenimiento(ConstantesInternasSistema.TIPO_MANTENIMIENTO_NUEVO);
	}

	@Override
	public void editItem() {
		setSaved("");
		setTipoMantenimiento(ConstantesInternasSistema.TIPO_MANTENIMIENTO_UPDATE);
	}

	@Override
	public void updateInsertItem() {
		if (tipoMantenimiento.equalsIgnoreCase(ConstantesInternasSistema.TIPO_MANTENIMIENTO_NUEVO)) {
			guardarItem();
		}
		if (tipoMantenimiento.equalsIgnoreCase(ConstantesInternasSistema.TIPO_MANTENIMIENTO_UPDATE)) {
			modificarItem();
		}
	}

	@Override
	public String ObtenerIdTransaccion() {
		FacesContext fCtx = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) fCtx.getExternalContext().getSession(false);
		String sessionId = session.getId().replace(".undefined", "");
		return sessionId;
	}

	@Override
	public void guardarItem() {
		GenericResponse response = null;
		try {
			for (ProyeccionGeneralBean bean : listaSeleccionados(selectedProyeccion)){
				System.out.println(bean.getProductoId());
				response = mantProyeccionGeneralService.nuevaProyeccionGeneral(ObtenerIdTransaccion(), bean);
				if (response.getCodigoRespuesta().equals( ConstantesInternasSistema.CODIGO_EXITO)) {
					setSaved(ConstantesInternasSistema.SAVED_ITEM_OK);
					System.out.println("Se registro Correctamente");
				} else {
					setSaved(ConstantesInternasSistema.SAVED_ITEM_ERROR);
					System.out.println("Hubo un error al Registrar " + response.getCodigoRespuesta() + " - " + response.getMensajeRespuesta());
				}
			}
			limpiarFormulario();
			inicializar();
		} catch (Exception e) {
			setSaved(ConstantesInternasSistema.SAVED_ITEM_ERROR);
			System.out.println("Error en el proceso " + e);
		}
	}

	@Override
	public void modificarItem() {
		GenericResponse response = null;
		try {
			for (ProyeccionGeneralBean bean : listaSeleccionados(selectedProyeccion)) {
				response = mantProyeccionGeneralService.editarProyeccionGeneral(ObtenerIdTransaccion(), bean);
				if (response.getCodigoRespuesta().equals( ConstantesInternasSistema.CODIGO_EXITO)) {
					setSaved(ConstantesInternasSistema.SAVED_ITEM_OK);
					System.out.println("Se Acualizo correctamente");
				} else {
					setSaved(ConstantesInternasSistema.SAVED_ITEM_ERROR);
					System.out.println("Hubo un Error al Actualizar de BD " + response.getCodigoRespuesta() + " - " + response.getMensajeRespuesta());
				}
			}
			inicializar();
		} catch (Exception e) {
			System.out.println("Error en el proceso " + e);
		}
	}

	@Override
	public void eliminarItem() {
		GenericResponse response = null;
		try {
			for (ProyeccionGeneralBean bean : selectedProyeccion) {
				response = mantProyeccionGeneralService.deleteProyeccionGeneral(
						ObtenerIdTransaccion(), bean.getId());
				if (response.getCodigoRespuesta().equals(ConstantesInternasSistema.CODIGO_EXITO)) {
					System.out.println("Se elimino Correctamente");
				} else {
					System.out.println("No se pudo Eliminar de BD "
							+ response.getCodigoRespuesta() + " - "
							+ response.getMensajeRespuesta());
				}
			}
			inicializar();
			opcionesControlador.desactivarControles();
		} catch (Exception e) {
			System.out.println("Hubo un error al tratar de Eliminar " + e);
		}
	}

	@Override
	public void actualizarEstado() {
		
	}

	@Override
	public void limpiarFormulario() {
		List<ProyeccionGeneralBean> listaBean = new ArrayList<ProyeccionGeneralBean>();
		ProyeccionGeneralBean bean = new ProyeccionGeneralBean();
		bean.setCodProd("");
		listaBean.add(bean);
		setSelectedProyeccion(listaBean);
	}

	@Override
	public void crearFiltro() {
			
	}
	/*
	 * Metodo para recorrer y validar los tipos de campos seleccionados
	 */
	public List<ProyeccionGeneralBean> listaSeleccionados(List<ProyeccionGeneralBean> listaRequest) {
		List<ProyeccionGeneralBean> response = new ArrayList<ProyeccionGeneralBean>();
		for (ProyeccionGeneralBean listaBean : listaRequest) {
				ProyeccionGeneralBean bean = new ProyeccionGeneralBean();
				bean.setId(listaBean.getId());
				bean.setProductoId(listaBean.getProductoId());
				bean.setCodigoBanda(listaBean.getCodigoBanda());
				bean.setCantidadProyectada(listaBean.getCantidadProyectada());
			response.add(bean);
		}
		return response;
	}
	public OpcionesControlador getOpcionesControlador() {
		return opcionesControlador;
	}

	public void setOpcionesControlador(OpcionesControlador opcionesControlador) {
		this.opcionesControlador = opcionesControlador;
	}

	public String getSaved() {
		return saved;
	}

	public void setSaved(String saved) {
		this.saved = saved;
	}

	public String getTxtBuscar() {
		return txtBuscar;
	}

	public void setTxtBuscar(String txtBuscar) {
		this.txtBuscar = txtBuscar;
	}
	public List<ProyeccionGeneralBean> getListaProyeccionGeneral() {
		return listaProyeccionGeneral;
	}
	public void setListaProyeccionGeneral(
			List<ProyeccionGeneralBean> listaProyeccionGeneral) {
		this.listaProyeccionGeneral = listaProyeccionGeneral;
	}
	public List<ProyeccionGeneralBean> getSelectedProyeccion() {
		return selectedProyeccion;
	}
	public void setSelectedProyeccion(List<ProyeccionGeneralBean> selectedProyeccion) {
		this.selectedProyeccion = selectedProyeccion;
	}
	public String getTipoMantenimiento() {
		return tipoMantenimiento;
	}
	public void setTipoMantenimiento(String tipoMantenimiento) {
		this.tipoMantenimiento = tipoMantenimiento;
	}
	public FiltrosSQLBean getCadenaFiltros() {
		return cadenaFiltros;
	}
	public void setCadenaFiltros(FiltrosSQLBean cadenaFiltros) {
		this.cadenaFiltros = cadenaFiltros;
	}
}
